perm filename ZDELAY.FAI[MUS,LCS] blob sn#319860 filedate 1977-12-01 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00002 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002		TITLE ZDELAY
C00013 ENDMK
C⊗;
	TITLE ZDELAY
	ENTRY ZDELAY ;FUNCTION ZDELAY(Input,Curlen,BufLen,ARRAY Buffer,Inptr);
	ENTRY SDELAY ;FUNCTION SDELAY(DUMMY,CURLEN,BUFLEN,ARRAY BUFFER,INPTR)
	ENTRY ZERO	;FUNCTION ZERO(ARRAY Foo);

ZDELAY:	0	;FUNCTION ZDELAY(Input, Curlen, BufLen, ARRAY Buffer, Inptr);
	KIFIX 1,@4(16)	;  BEGIN 
	ADD 1,3(16)	;  VARIABLE Samp1, Samp2;			 
	MOVE 0,@(16)	;  Buffer[Inptr] ← Input;     <Read in the new sample
	MOVEM 0,(1)
	MOVE 4,@4(16); INPUT    Samp1 ← Inptr - Curlen;     <Position readout pointer
	FADR 4,[1.0] ; IF Samp1<0 THEN Samp1←Samp1+BufLen;<Might have to wrap around
	CAML 4,@2(16);  Inptr ← Inptr + 1;  <Always increment input by 1 sample
	SETZ 4, ;IF Inptr≥BufLen  THEN Inptr←0;<Wrap around if at end of array
	MOVEM 4,@4(16)
DL:	MOVE 1,@4(16);   GET INPTR  THEN SUBTRACT CURLEN
   	FSBR 1,@1(16) ; IF Samp1<BufLen-1 THEN Samp2←Samp1+1<Are we interpolating between
	SKIPGE 1	;  ELSE Samp2←0;  <the last & first locations?
	FADR 1,@2(16) ;RETURN 
	KIFIX 3,1  ;(Buffer[Samp1]+((Samp1-INT(Samp1))*(Buffer[Samp2]-Buffer[Samp1])));
	FLTR 4,3	;  END;
	ADD 3,3(16)	;***THIS CODE IS BASED ON THE FOLLOW FORTRAN
	CAMN 4,1	;	BUFFER(IPTR)=INPUT
	JRST ZD		;	IPTR=IPTR+1
	FSBR 4,1	;	P=IPTR-CURLEN
	FADR 1,[1.0]	;	IF(P)P=P+BUFLEN
	CAML 1,@2(16)	;	A=FLOAT(IFIX(P))
	SETZ 1,		;	IF(A.EQ.P)GO TO 1
	KIFIX 1,1	;	A=P-A
	ADD 1,3(16)	;	Q=P+1
	MOVN 0,(1)	;	IF(Q.GE.BUFLEN)Q=0
	FADR 0,(3)	;	ZDELAY=BUFFER(P)+(BUFFER(Q)-BUFFER(P))*A
	FMPR 0,4	;	RETURN
	FADR 0,(3)	;1	ZDELAY=BUFFER(P)
	JRA 16,5(16)	;	END
ZD:	MOVE 0,(3)
	JRA 16,5(16)

SDELAY:	0		;SDELAY USES MOST OF ZDELAY CODE
	JRST DL		;ONLY READS DELAY ARRAY 

ZERO:	0		;FUNCTION ZEROX(ARRAY Foo);
	HRRZ 1,(16) 
	MOVE 1,-1(1) 	;  BEGIN VARIABLE Len,I;
	FSC 1,233	;1 IS FLTING PT LENGTH
	KIFIX 1,1	;   Len←LENGTH(Foo)-1;
	SOJ 1,		
ZR:	MOVE 2,1 
	ADD 2,(16)	;   FOR I←0 STEP 1 UNTIL Len DO Foo(I)←0;
	SETZM (2)	;   END
	SOJGE 1,ZR
	JRA 16,1(16)
	END